<?php

if (!defined('BASEPATH'))
    exit('No direct script access allowed');

class Cc_model_a extends CI_Model {

    public function __construct() {
        parent::__construct();
    }

    /**
     * Verifica que el usuario y el password coincidan
     * @param string $usuario Nombre de usuario
     * @param string $pass Password
     * @return bool false si el loggin fue incorrecto true si fue correcto
     */
    function verificar_datos($usuario, $pass) {
        $query = "  select  a_administrador_id,
                            a_nombre,
                            a_mail,
                            ta.ta_tipo_administrador_id,
                            ta.ta_nombre
                    from administrador a join tipo_administrador ta 
                    on(ta.ta_tipo_administrador_id=a.ta_tipo_administrador_id)
                    where a.a_usuario=? and a.a_pass=?";
        $resultado = $this->db->query($query, array($usuario, $pass));
        $out = $resultado->row();
        $resultado->next_result();
        $resultado->free_result();
        return $out;
    }

    function lista_empresas() {
        $query = 'select e_empresa_id, e_nombre from empresa';
        $resultado = $this->db->query($query);
        $out = $resultado->result();
        $resultado->next_result();
        $resultado->free_result();
        return $out;
    }

    function lista_divisiones() {
        $query = '  select  d.d_division_id, 
                            e.e_nombre,
                            d.d_nombre 
                    from empresa e 
                    join division d on(e.e_empresa_id=d.e_empresa_id)';
        $resultado = $this->db->query($query);
        $out = $resultado->result();
        $resultado->next_result();
        $resultado->free_result();
        return $out;
    }

    function lista_tipo_materiales() {
        $query = 'SELECT tm_tipo_material_id, tm_nombre FROM tipo_material';
        $resultado = $this->db->query($query);
        $out = $resultado->result();
        $resultado->next_result();
        $resultado->free_result();
        return $out;
    }

    function lista_modulos() {
        $query = 'select    m.m_modulo_id, 
                            e.e_nombre,
                            d.d_nombre,
                            m.m_nombre
                    from empresa e 
                    join division d on(e.e_empresa_id=d.e_empresa_id) 
                    join modulo m on(m.d_division_id=d.d_division_id)';
        $resultado = $this->db->query($query);
        $out = $resultado->result();
        $resultado->next_result();
        $resultado->free_result();
        return $out;
    }

    function lista_submodulos() {
        $query = 'select    sm.sm_sub_modulo_id, 
                            e.e_nombre,
                            d.d_nombre,
                            m.m_nombre,
                            sm.sm_nombre
                from empresa e 
                join division d on(e.e_empresa_id=d.e_empresa_id) 
                join modulo m on(m.d_division_id=d.d_division_id)
                join sub_modulo sm on(sm.m_modulo_id=m.m_modulo_id)';
        $resultado = $this->db->query($query);
        $out = $resultado->result();
        $resultado->next_result();
        $resultado->free_result();
        return $out;
    }

    function lista_material() {
        $query = 'select    ma.m_material_id, 
                            e.e_nombre,
                            d.d_nombre,
                            m.m_nombre,
                            sm.sm_nombre,
                            ma.m_titulo,
                            ma.m_orden
                    from empresa e 
                    join division d on(e.e_empresa_id=d.e_empresa_id) 
                    join modulo m on(m.d_division_id=d.d_division_id)
                    join sub_modulo sm on(sm.m_modulo_id=m.m_modulo_id)
                    join material ma on(ma.sm_sub_modulo_id=sm.sm_sub_modulo_id)';
        $resultado = $this->db->query($query);
        $out = $resultado->result();
        $resultado->next_result();
        $resultado->free_result();
        return $out;
    }

    function lista_puestos() {
        $query = '  SELECT te_tipo_empleado_id,te_nombre FROM tipo_empleado';
        $resultado = $this->db->query($query);
        $out = $resultado->result();
        $resultado->next_result();
        $resultado->free_result();
        return $out;
    }

    function lista_log() {
        $query = 'select l_log_id, l_fecha,l_hora, l_ip, l_nombre from log_accesos limit 1000';
        $resultado = $this->db->query($query);
        $out = $resultado->result();
        $resultado->next_result();
        $resultado->free_result();
        return $out;
    }

    function lista_empleados() {
        $query = '  select em.e_nombre,
                            d.d_nombre,
                            te.te_nombre,
                        count(*) as empleados
                    from empleado e 
                    join tipo_empleado te on(e.te_tipo_empleado_id=te.te_tipo_empleado_id)
                    join division d on(d.d_division_id=e.d_division_id)
                    join empresa em on(em.e_empresa_id=d.e_empresa_id)
                    group by e_nombre,d_nombre,te_nombre';
        $resultado = $this->db->query($query);
        $out = $resultado->result();
        $resultado->next_result();
        $resultado->free_result();
        return $out;
    }

    public function lista_docs() {
        $query = 'select  e_nombre,
                    d_nombre,
                    m_nombre,
                    sm_nombre,
                    m_titulo,
                    m_nombre_documento,
                    m_nombre_en_disco,
                    m_orden,
                    concat(substring(m_descripcion,1,25),\'...\') m_descripcion
                from sub_modulo sb 
                join material m on sb.sm_sub_modulo_id = m.sm_sub_modulo_id
                join modulo mo on mo.m_modulo_id = sb.m_modulo_id
                join division d on d.d_division_id = mo.d_division_id
                join empresa e on d.e_empresa_id = e.e_empresa_id;';
        $resultado = $this->db->query($query);
        $out = $resultado->result();
        $resultado->next_result();
        $resultado->free_result();
        return $out;
    }

    public function borrarDocumento($nombre_en_disco) {
        $query = "DELETE FROM material WHERE m_nombre_en_disco = '$nombre_en_disco'";
        $this->db->query($query);
    }

    public function gEmpresa($e_nombre, $e_name_imagen) {
        $query = "insert into empresa(e_nombre,e_name_imagen) values('$e_nombre','$e_name_imagen')";
        $this->db->query($query);
    }

    public function cEmpresas() {
        $query = 'SELECT e_empresa_id,e_nombre FROM empresa';
        $resultado = $this->db->query($query);
        $out = $resultado->result();
        $resultado->next_result();
        $resultado->free_result();
        return $out;
    }

    public function gDivision($e_empresa_id, $d_nombre) {
        $query = "insert into division(e_empresa_id,d_nombre) values($e_empresa_id,'$d_nombre')";
        $this->db->query($query);
    }

    public function listaDivisiones_xEmpresa($e_empresa_id) {
        $part = $this->prepare_list($e_empresa_id, 'where e_empresa_id in (');
        $query = "SELECT d_division_id,d_nombre FROM division  $part";
        $resultado = $this->db->query($query);
        $out = $resultado->result();
        $resultado->next_result();
        $resultado->free_result();
        return $out;
    }

    public function gModulo($d_division_id, $m_nombre) {
        $query = "insert into modulo(d_division_id,m_nombre) values($d_division_id,'$m_nombre')";
        $this->db->query($query);
    }

    public function listaModulos_xDivision($d_division_id) {
        $part = $this->prepare_list($d_division_id, 'where d_division_id in (');
        $query = "SELECT m_modulo_id,m_nombre FROM modulo  $part";
        $resultado = $this->db->query($query);
        $out = $resultado->result();
        $resultado->next_result();
        $resultado->free_result();
        return $out;
    }

    public function listaMateriales_xSModulo($sm_sub_modulo_id) {
        $part = $this->prepare_list($sm_sub_modulo_id, 'where sm_sub_modulo_id in (');
        $query = "select m_material_id,m_titulo from material $part";
        $resultado = $this->db->query($query);
        $out = $resultado->result();
        $resultado->next_result();
        $resultado->free_result();
        return $out;
    }

    public function gSubMod($m_modulo_id, $sm_nombre) {
        $query = "insert into sub_modulo(m_modulo_id,sm_nombre) values($m_modulo_id,'$sm_nombre')";
        $this->db->query($query);
    }

    public function gMaterial($sm_sub_modulo_id, $m_titulo, $m_nombre_documento, $m_nombre_en_disco, $m_orden, $m_descripcion, $m_minimo, $tm_tipo_material_id,$m_examen) {
        $query = "insert into material(sm_sub_modulo_id,m_titulo,m_nombre_documento,m_nombre_en_disco,m_orden,m_descripcion,m_minimo,tm_tipo_material_id,m_examen) 
                values(?,?,?,?,?,?,?,?,?)";
        $this->db->query($query, array($sm_sub_modulo_id, $m_titulo, $m_nombre_documento, $m_nombre_en_disco, $m_orden, $m_descripcion, $m_minimo, $tm_tipo_material_id,$m_examen));
    }

    public function listaSubMod_xModulo($m_modulo_id) {
        $part = $this->prepare_list($m_modulo_id, 'where m_modulo_id in (');
        $query = "SELECT sm_sub_modulo_id,sm_nombre FROM sub_modulo $part";
        $resultado = $this->db->query($query);
        $out = $resultado->result();
        $resultado->next_result();
        $resultado->free_result();
        return $out;
    }

    public function promXempleado() {
        $query = "select 	e.e_empresa_id,
                                e.e_nombre,
                                d.d_division_id,
                                d.d_nombre,
                                m.m_modulo_id,
                                m.m_nombre,
                                sm.sm_sub_modulo_id,
                                sm.sm_nombre,
                                mt.m_titulo,
                                p.m_material_id,
                                eo.e_empleado_id,
                        DATE_FORMAT(ct.ct_uacceso,'%Y-%m-%d') as ct_uacceso,
                                round((count(*)/tp.total_preguntas)*10,2) as prom
                from empresa e 
                join division d on(e.e_empresa_id=d.e_empresa_id)
                join empleado eo on(d.d_division_id=eo.d_division_id)
                join seleccion s on(eo.e_empleado_id=s.e_empleado_id)
                join pregunta p on(s.p_pregunta_id=p.p_pregunta_id)
                join opcion o on(p.p_pregunta_id=o.p_pregunta_id)
                join modulo m on(d.d_division_id=d.d_division_id)
                join sub_modulo sm on(m.m_modulo_id=sm.m_modulo_id)
                join material mt on(sm.sm_sub_modulo_id=mt.sm_sub_modulo_id and mt.m_material_id=p.m_material_id)
                join cursos_tomados ct on(ct.e_empleado_id=eo.e_empleado_id and ct.m_material_id=mt.m_material_id)

                join (	
                                                SELECT  p.m_material_id,
                                                                                count(*) total_preguntas 
                                                FROM 	pregunta p 
                                                group by p.m_material_id
                                ) tp on(tp.m_material_id=p.m_material_id)
                where s.s_seleccionada=o.o_matricula 
                and o.o_correcto
                group by 	e.e_empresa_id,
                                                d.d_division_id,
                                                m.m_modulo_id,
                                                sm.sm_sub_modulo_id,
                                                p.m_material_id,
                                                eo.e_empleado_id
                order by ct.ct_uacceso";
        $resultado = $this->db->query($query);
        $out = $resultado->result();
        $resultado->next_result();
        $resultado->free_result();
        return $out;
    }

    public function promXSM() {
        $query = "select    x.e_empresa_id,
                            x.e_nombre,
                            x.d_division_id,
                            x.d_nombre,
                            x.m_modulo_id,
                            x.m_nombre,
                            x.sm_sub_modulo_id,
                            x.sm_nombre,
                            round(avg(x.prom),2) as prom

                from (
                                select 	e.e_empresa_id,
                                        e.e_nombre,
                                        d.d_division_id,
                                        d.d_nombre,
                                        m.m_modulo_id,
                                        m.m_nombre,
                                        sm.sm_sub_modulo_id,
                                        sm.sm_nombre,
                                        mt.m_titulo,
                                        p.m_material_id,
                                        eo.e_empleado_id,
                                        round((count(*)/tp.total_preguntas)*10,2) as prom
                                from empresa e 
                                join division d on(e.e_empresa_id=d.e_empresa_id)
                                join empleado eo on(d.d_division_id=eo.d_division_id)
                                join seleccion s on(eo.e_empleado_id=s.e_empleado_id)
                                join pregunta p on(s.p_pregunta_id=p.p_pregunta_id)
                                join opcion o on(p.p_pregunta_id=o.p_pregunta_id)
                                join modulo m on(d.d_division_id=d.d_division_id)
                                join sub_modulo sm on(m.m_modulo_id=sm.m_modulo_id)
                                join material mt on(sm.sm_sub_modulo_id=mt.sm_sub_modulo_id and mt.m_material_id=p.m_material_id)

                                        join (	
                                                        SELECT  p.m_material_id,
                                                                        count(*) total_preguntas 
                                                        FROM 	pregunta p 
                                                        group by p.m_material_id
                                                ) tp on(tp.m_material_id=p.m_material_id)
                                        where s.s_seleccionada=o.o_matricula 
                                        and o.o_correcto
                                        group by 	e.e_empresa_id,
                                                                d.d_division_id,
                                                                m.m_modulo_id,
                                                                sm.sm_sub_modulo_id,
                                                                p.m_material_id,
                                                                eo.e_empleado_id
                        ) as x
                 group by 	x.e_empresa_id,
                                        x.d_division_id,
                                        x.m_modulo_id,
                                        x.sm_sub_modulo_id

                order by    x.e_empresa_id,
                                        x.d_division_id,
                                        x.m_modulo_id,
                                        x.sm_sub_modulo_id  ";
        $resultado = $this->db->query($query);
        $out = $resultado->result();
        $resultado->next_result();
        $resultado->free_result();
        return $out;
    }

    public function promXM() {
        $query = "select 	x.e_empresa_id,
                        x.e_nombre,
                        x.d_division_id,
                        x.d_nombre,
                        x.m_modulo_id,
                        x.m_nombre,
                        round(avg(x.prom),2) as prom

                from (
                                select 	x.e_empresa_id,
                                        x.e_nombre,
                                        x.d_division_id,
                                        x.d_nombre,
                                        x.m_modulo_id,
                                        x.m_nombre,
                                        x.sm_sub_modulo_id,
                                        x.sm_nombre,
                                        round(avg(x.prom),2) as prom

                                from (
                                                select 	e.e_empresa_id,
                                                        e.e_nombre,
                                                        d.d_division_id,
                                                        d.d_nombre,
                                                        m.m_modulo_id,
                                                        m.m_nombre,
                                                        sm.sm_sub_modulo_id,
                                                        sm.sm_nombre,
                                                        mt.m_titulo,
                                                        p.m_material_id,
                                                        eo.e_empleado_id,
                                                        round((count(*)/tp.total_preguntas)*10,2) as prom
                                                from empresa e 
                                                join division d on(e.e_empresa_id=d.e_empresa_id)
                                                join empleado eo on(d.d_division_id=eo.d_division_id)
                                                join seleccion s on(eo.e_empleado_id=s.e_empleado_id)
                                                join pregunta p on(s.p_pregunta_id=p.p_pregunta_id)
                                                join opcion o on(p.p_pregunta_id=o.p_pregunta_id)
                                                join modulo m on(d.d_division_id=d.d_division_id)
                                                join sub_modulo sm on(m.m_modulo_id=sm.m_modulo_id)
                                                join material mt on(sm.sm_sub_modulo_id=mt.sm_sub_modulo_id and mt.m_material_id=p.m_material_id)

                                                        join (	
                                                                        SELECT  p.m_material_id,
                                                                                count(*) total_preguntas 
                                                                        FROM 	pregunta p 
                                                                        group by p.m_material_id
                                                                ) tp on(tp.m_material_id=p.m_material_id)
                                                        where s.s_seleccionada=o.o_matricula 
                                                        and o.o_correcto
                                                        group by 	e.e_empresa_id,
                                                                        d.d_division_id,
                                                                        m.m_modulo_id,
                                                                        sm.sm_sub_modulo_id,
                                                                        p.m_material_id,
                                                                        eo.e_empleado_id
                                        ) as x
                                 group by 	x.e_empresa_id,
                                                x.d_division_id,
                                                x.m_modulo_id,
                                                x.sm_sub_modulo_id

                                order by    x.e_empresa_id,
                                            x.d_division_id,
                                            x.m_modulo_id,
                                            x.sm_sub_modulo_id  
                        ) as x
                 group by 	x.e_empresa_id,
                                x.d_division_id,
                                x.m_modulo_id";
        $resultado = $this->db->query($query);
        $out = $resultado->result();
        $resultado->next_result();
        $resultado->free_result();
        return $out;
    }

    public function promXD() {
        $query = "select 	x.e_empresa_id,
                                x.e_nombre,
                                x.d_division_id,
                                x.d_nombre,
                                round(avg(x.prom),2) as prom
                from (        
                        select 	x.e_empresa_id,
                                x.e_nombre,
                                x.d_division_id,
                                x.d_nombre,
                                x.m_modulo_id,
                                x.m_nombre,
                                round(avg(x.prom),2) as prom

                        from (
                                        select 	x.e_empresa_id,
                                                x.e_nombre,
                                                x.d_division_id,
                                                x.d_nombre,
                                                x.m_modulo_id,
                                                x.m_nombre,
                                                x.sm_sub_modulo_id,
                                                x.sm_nombre,
                                                round(avg(x.prom),2) as prom

                                        from (
                                                        select 	e.e_empresa_id,
                                                                e.e_nombre,
                                                                d.d_division_id,
                                                                d.d_nombre,
                                                                m.m_modulo_id,
                                                                m.m_nombre,
                                                                sm.sm_sub_modulo_id,
                                                                sm.sm_nombre,
                                                                mt.m_titulo,
                                                                p.m_material_id,
                                                                eo.e_empleado_id,
                                                                round((count(*)/tp.total_preguntas)*10,2) as prom
                                                        from empresa e 
                                                        join division d on(e.e_empresa_id=d.e_empresa_id)
                                                        join empleado eo on(d.d_division_id=eo.d_division_id)
                                                        join seleccion s on(eo.e_empleado_id=s.e_empleado_id)
                                                        join pregunta p on(s.p_pregunta_id=p.p_pregunta_id)
                                                        join opcion o on(p.p_pregunta_id=o.p_pregunta_id)
                                                        join modulo m on(d.d_division_id=d.d_division_id)
                                                        join sub_modulo sm on(m.m_modulo_id=sm.m_modulo_id)
                                                        join material mt on(sm.sm_sub_modulo_id=mt.sm_sub_modulo_id and mt.m_material_id=p.m_material_id)

                                                                join (	
                                                                                SELECT  p.m_material_id,
                                                                                                count(*) total_preguntas 
                                                                                FROM 	pregunta p 
                                                                                group by p.m_material_id
                                                                        ) tp on(tp.m_material_id=p.m_material_id)
                                                                where s.s_seleccionada=o.o_matricula 
                                                                and o.o_correcto
                                                                group by 	e.e_empresa_id,
                                                                                        d.d_division_id,
                                                                                        m.m_modulo_id,
                                                                                        sm.sm_sub_modulo_id,
                                                                                        p.m_material_id,
                                                                                        eo.e_empleado_id
                                                ) as x
                                         group by 	x.e_empresa_id,
                                                                x.d_division_id,
                                                                x.m_modulo_id,
                                                                x.sm_sub_modulo_id

                                        order by    x.e_empresa_id,
                                                                x.d_division_id,
                                                                x.m_modulo_id,
                                                                x.sm_sub_modulo_id  
                                ) as x
                         group by 	x.e_empresa_id,
                                                x.d_division_id,
                                                x.m_modulo_id
                ) as x
                group by 	x.e_empresa_id,
                                        x.d_division_id

                order by    x.e_empresa_id,
                                        x.d_division_id ";
        $resultado = $this->db->query($query);
        $out = $resultado->result();
        $resultado->next_result();
        $resultado->free_result();
        return $out;
    }

    public function promXE() {
        $query = "select 	x.e_empresa_id,
                                x.e_nombre,
                                round(avg(x.prom),2) as prom
                from (        
                                select 	x.e_empresa_id,
                                        x.e_nombre,
                                        x.d_division_id,
                                        x.d_nombre,
                                        round(avg(x.prom),2) as prom
                                from (        
                                        select 	x.e_empresa_id,
                                                x.e_nombre,
                                                x.d_division_id,
                                                x.d_nombre,
                                                x.m_modulo_id,
                                                x.m_nombre,
                                                round(avg(x.prom),2) as prom

                                        from (
                                                        select 	x.e_empresa_id,
                                                                x.e_nombre,
                                                                x.d_division_id,
                                                                x.d_nombre,
                                                                x.m_modulo_id,
                                                                x.m_nombre,
                                                                x.sm_sub_modulo_id,
                                                                x.sm_nombre,
                                                                round(avg(x.prom),2) as prom

                                                        from (
                                                                        select 	e.e_empresa_id,
                                                                                e.e_nombre,
                                                                                d.d_division_id,
                                                                                d.d_nombre,
                                                                                m.m_modulo_id,
                                                                                m.m_nombre,
                                                                                sm.sm_sub_modulo_id,
                                                                                sm.sm_nombre,
                                                                                mt.m_titulo,
                                                                                p.m_material_id,
                                                                                eo.e_empleado_id,
                                                                                round((count(*)/tp.total_preguntas)*10,2) as prom
                                                                        from empresa e 
                                                                        join division d on(e.e_empresa_id=d.e_empresa_id)
                                                                        join empleado eo on(d.d_division_id=eo.d_division_id)
                                                                        join seleccion s on(eo.e_empleado_id=s.e_empleado_id)
                                                                        join pregunta p on(s.p_pregunta_id=p.p_pregunta_id)
                                                                        join opcion o on(p.p_pregunta_id=o.p_pregunta_id)
                                                                        join modulo m on(d.d_division_id=d.d_division_id)
                                                                        join sub_modulo sm on(m.m_modulo_id=sm.m_modulo_id)
                                                                        join material mt on(sm.sm_sub_modulo_id=mt.sm_sub_modulo_id and mt.m_material_id=p.m_material_id)

                                                                                join (	
                                                                                                SELECT  p.m_material_id,
                                                                                                                count(*) total_preguntas 
                                                                                                FROM 	pregunta p 
                                                                                                group by p.m_material_id
                                                                                        ) tp on(tp.m_material_id=p.m_material_id)
                                                                                where s.s_seleccionada=o.o_matricula 
                                                                                and o.o_correcto
                                                                                group by 	e.e_empresa_id,
                                                                                                        d.d_division_id,
                                                                                                        m.m_modulo_id,
                                                                                                        sm.sm_sub_modulo_id,
                                                                                                        p.m_material_id,
                                                                                                        eo.e_empleado_id
                                                                ) as x
                                                         group by 	x.e_empresa_id,
                                                                                x.d_division_id,
                                                                                x.m_modulo_id,
                                                                                x.sm_sub_modulo_id

                                                        order by    x.e_empresa_id,
                                                                                x.d_division_id,
                                                                                x.m_modulo_id,
                                                                                x.sm_sub_modulo_id  
                                                ) as x
                                         group by 	x.e_empresa_id,
                                                                x.d_division_id,
                                                                x.m_modulo_id
                                ) as x
                                group by 	x.e_empresa_id,
                                                        x.d_division_id

                                order by    x.e_empresa_id,
                                                        x.d_division_id 
                            )as x  
                group by 	x.e_empresa_id

                order by    x.e_empresa_id ";
        $resultado = $this->db->query($query);
        $out = $resultado->result();
        $resultado->next_result();
        $resultado->free_result();
        return $out;
    }

    public function promXdivEmpresa($e_empresa_id) {
        $query = "select    x.e_empresa_id,
                            x.e_nombre,
                            x.d_division_id,
                            x.d_nombre,
                            x.m_modulo_id,
                            x.m_nombre,
                            x.sm_sub_modulo_id,
                            x.sm_nombre,
                            x.ct_uacceso,
                            round(avg(x.prom),2) as prom

                from (
                        select 	e.e_empresa_id,
                                e.e_nombre,
                                d.d_division_id,
                                d.d_nombre,
                                m.m_modulo_id,
                                m.m_nombre,
                                sm.sm_sub_modulo_id,
                                sm.sm_nombre,
                                mt.m_titulo,
                                p.m_material_id,
                                eo.e_empleado_id,
                                DATE_FORMAT(ct.ct_uacceso,'%Y-%m-%d') as ct_uacceso,
                                round((count(*)/tp.total_preguntas)*10,2) as prom
                        from empresa e 
                        join division d on(e.e_empresa_id=d.e_empresa_id)
                        join empleado eo on(d.d_division_id=eo.d_division_id)
                        join seleccion s on(eo.e_empleado_id=s.e_empleado_id)
                        join pregunta p on(s.p_pregunta_id=p.p_pregunta_id)
                        join opcion o on(p.p_pregunta_id=o.p_pregunta_id)
                        join modulo m on(d.d_division_id=d.d_division_id)
                        join sub_modulo sm on(m.m_modulo_id=sm.m_modulo_id)
                        join material mt on(sm.sm_sub_modulo_id=mt.sm_sub_modulo_id and mt.m_material_id=p.m_material_id)
                        join cursos_tomados ct on(ct.e_empleado_id=eo.e_empleado_id and ct.m_material_id=mt.m_material_id)

                        join (	
                                        SELECT  p.m_material_id,
                                                                        count(*) total_preguntas 
                                        FROM 	pregunta p 
                                        group by p.m_material_id
                                        ) tp on(tp.m_material_id=p.m_material_id)
                        where s.s_seleccionada=o.o_matricula 
                        and o.o_correcto
                        and e.e_empresa_id=$e_empresa_id
                        group by 	e.e_empresa_id,
                                                        d.d_division_id,
                                                        m.m_modulo_id,
                                                        sm.sm_sub_modulo_id,
                                                        p.m_material_id,
                                                        eo.e_empleado_id
                        order by 	d.d_division_id,
                                                m.m_modulo_id,
                                                sm.sm_sub_modulo_id,
                                                p.m_material_id,
                                                ct.ct_uacceso 
                ) as x
         group by 	x.e_empresa_id,
                                x.d_division_id,
                                x.m_modulo_id,
                                x.sm_sub_modulo_id

        order by    x.ct_uacceso,
                    round(avg(x.prom),2)";
        $resultado = $this->db->query($query);
        $out = $resultado->result();
        $resultado->next_result();
        $resultado->free_result();
        return $out;
    }

    public function tpersonasXMaterial() {
        $query = "select 	x.e_empresa_id,
                                x.e_nombre,
                                x.d_division_id,
                                x.d_nombre,
                                x.m_modulo_id,
                                x.m_nombre,
                                x.sm_sub_modulo_id,
                                x.sm_nombre,
                                x.m_titulo,
                                x.m_material_id,
                                count(*) as tpersonas
                        from (
                                        select 	e.e_empresa_id,
                                                e.e_nombre,
                                                d.d_division_id,
                                                d.d_nombre,
                                                m.m_modulo_id,
                                                m.m_nombre,
                                                sm.sm_sub_modulo_id,
                                                sm.sm_nombre,
                                                mt.m_titulo,
                                                p.m_material_id,
                                                eo.e_empleado_id
                                        from empresa e 
                                        join division d on(e.e_empresa_id=d.e_empresa_id)
                                        join empleado eo on(d.d_division_id=eo.d_division_id)
                                        join seleccion s on(eo.e_empleado_id=s.e_empleado_id)
                                        join pregunta p on(s.p_pregunta_id=p.p_pregunta_id)
                                        join opcion o on(p.p_pregunta_id=o.p_pregunta_id)
                                        join modulo m on(d.d_division_id=d.d_division_id)
                                        join sub_modulo sm on(m.m_modulo_id=sm.m_modulo_id)
                                        join material mt on(sm.sm_sub_modulo_id=mt.sm_sub_modulo_id and mt.m_material_id=p.m_material_id)

                                        where 	s.s_seleccionada=o.o_matricula 
                                        and 	o.o_correcto
                                        group by 	e.e_empresa_id,
                                                        d.d_division_id,
                                                        m.m_modulo_id,
                                                        sm.sm_sub_modulo_id,
                                                        p.m_material_id,
                                                        eo.e_empleado_id
                                        ) as x
                        group by        x.e_empresa_id,
                                        x.d_division_id,
                                        x.m_modulo_id,
                                        x.sm_sub_modulo_id,
                                         x.m_material_id";
        $resultado = $this->db->query($query);
        $out = $resultado->result();
        $resultado->next_result();
        $resultado->free_result();
        return $out;
    }

    public function tpersonasXSM() {
        $query = "select 	x.e_empresa_id,
                                x.e_nombre,
                                x.d_division_id,
                                x.d_nombre,
                                x.m_modulo_id,
                                x.m_nombre,
                                x.sm_sub_modulo_id,
                                x.sm_nombre,
                                count(*) as tpersonas
                        from (
                                        select 	e.e_empresa_id,
                                                e.e_nombre,
                                                d.d_division_id,
                                                d.d_nombre,
                                                m.m_modulo_id,
                                                m.m_nombre,
                                                sm.sm_sub_modulo_id,
                                                sm.sm_nombre,
                                                mt.m_titulo,
                                                p.m_material_id,
                                                eo.e_empleado_id
                                        from empresa e 
                                        join division d on(e.e_empresa_id=d.e_empresa_id)
                                        join empleado eo on(d.d_division_id=eo.d_division_id)
                                        join seleccion s on(eo.e_empleado_id=s.e_empleado_id)
                                        join pregunta p on(s.p_pregunta_id=p.p_pregunta_id)
                                        join opcion o on(p.p_pregunta_id=o.p_pregunta_id)
                                        join modulo m on(d.d_division_id=d.d_division_id)
                                        join sub_modulo sm on(m.m_modulo_id=sm.m_modulo_id)
                                        join material mt on(sm.sm_sub_modulo_id=mt.sm_sub_modulo_id and mt.m_material_id=p.m_material_id)

                                        where 	s.s_seleccionada=o.o_matricula 
                                        and 	o.o_correcto
                                        group by 	e.e_empresa_id,
                                                        d.d_division_id,
                                                        m.m_modulo_id,
                                                        sm.sm_sub_modulo_id,
                                                        p.m_material_id,
                                                        eo.e_empleado_id
                                        ) as x
                        group by        x.e_empresa_id,
                                        x.d_division_id,
                                        x.m_modulo_id,
                                        x.sm_sub_modulo_id";
        $resultado = $this->db->query($query);
        $out = $resultado->result();
        $resultado->next_result();
        $resultado->free_result();
        return $out;
    }

    public function tpersonasXM() {
        $query = "select 	x.e_empresa_id,
                                x.e_nombre,
                                x.d_division_id,
                                x.d_nombre,
                                x.m_modulo_id,
                                x.m_nombre,
                                count(*) as tpersonas
                        from (
                                        select 	e.e_empresa_id,
                                                e.e_nombre,
                                                d.d_division_id,
                                                d.d_nombre,
                                                m.m_modulo_id,
                                                m.m_nombre,
                                                sm.sm_sub_modulo_id,
                                                sm.sm_nombre,
                                                mt.m_titulo,
                                                p.m_material_id,
                                                eo.e_empleado_id
                                        from empresa e 
                                        join division d on(e.e_empresa_id=d.e_empresa_id)
                                        join empleado eo on(d.d_division_id=eo.d_division_id)
                                        join seleccion s on(eo.e_empleado_id=s.e_empleado_id)
                                        join pregunta p on(s.p_pregunta_id=p.p_pregunta_id)
                                        join opcion o on(p.p_pregunta_id=o.p_pregunta_id)
                                        join modulo m on(d.d_division_id=d.d_division_id)
                                        join sub_modulo sm on(m.m_modulo_id=sm.m_modulo_id)
                                        join material mt on(sm.sm_sub_modulo_id=mt.sm_sub_modulo_id and mt.m_material_id=p.m_material_id)

                                        where 	s.s_seleccionada=o.o_matricula 
                                        and 	o.o_correcto
                                        group by 	e.e_empresa_id,
                                                        d.d_division_id,
                                                        m.m_modulo_id,
                                                        sm.sm_sub_modulo_id,
                                                        p.m_material_id,
                                                        eo.e_empleado_id
                                        ) as x
                        group by        x.e_empresa_id,
                                        x.d_division_id,
                                        x.m_modulo_id";
        $resultado = $this->db->query($query);
        $out = $resultado->result();
        $resultado->next_result();
        $resultado->free_result();
        return $out;
    }

    public function tpersonasXD() {
        $query = "select 	x.e_empresa_id,
                                x.e_nombre,
                                x.d_division_id,
                                x.d_nombre,
                                count(*) as tpersonas
                        from (
                                        select 	e.e_empresa_id,
                                                e.e_nombre,
                                                d.d_division_id,
                                                d.d_nombre,
                                                m.m_modulo_id,
                                                m.m_nombre,
                                                sm.sm_sub_modulo_id,
                                                sm.sm_nombre,
                                                mt.m_titulo,
                                                p.m_material_id,
                                                eo.e_empleado_id
                                        from empresa e 
                                        join division d on(e.e_empresa_id=d.e_empresa_id)
                                        join empleado eo on(d.d_division_id=eo.d_division_id)
                                        join seleccion s on(eo.e_empleado_id=s.e_empleado_id)
                                        join pregunta p on(s.p_pregunta_id=p.p_pregunta_id)
                                        join opcion o on(p.p_pregunta_id=o.p_pregunta_id)
                                        join modulo m on(d.d_division_id=d.d_division_id)
                                        join sub_modulo sm on(m.m_modulo_id=sm.m_modulo_id)
                                        join material mt on(sm.sm_sub_modulo_id=mt.sm_sub_modulo_id and mt.m_material_id=p.m_material_id)

                                        where 	s.s_seleccionada=o.o_matricula 
                                        and 	o.o_correcto
                                        group by 	e.e_empresa_id,
                                                        d.d_division_id,
                                                        m.m_modulo_id,
                                                        sm.sm_sub_modulo_id,
                                                        p.m_material_id,
                                                        eo.e_empleado_id
                                        ) as x
                        group by        x.e_empresa_id,
                                        x.d_division_id";
        $resultado = $this->db->query($query);
        $out = $resultado->result();
        $resultado->next_result();
        $resultado->free_result();
        return $out;
    }

    public function tpersonasXE() {
        $query = "select 	x.e_empresa_id,
                                x.e_nombre,
                                count(*) as tpersonas
                        from (
                                        select 	e.e_empresa_id,
                                                e.e_nombre,
                                                d.d_division_id,
                                                d.d_nombre,
                                                m.m_modulo_id,
                                                m.m_nombre,
                                                sm.sm_sub_modulo_id,
                                                sm.sm_nombre,
                                                mt.m_titulo,
                                                p.m_material_id,
                                                eo.e_empleado_id
                                        from empresa e 
                                        join division d on(e.e_empresa_id=d.e_empresa_id)
                                        join empleado eo on(d.d_division_id=eo.d_division_id)
                                        join seleccion s on(eo.e_empleado_id=s.e_empleado_id)
                                        join pregunta p on(s.p_pregunta_id=p.p_pregunta_id)
                                        join opcion o on(p.p_pregunta_id=o.p_pregunta_id)
                                        join modulo m on(d.d_division_id=d.d_division_id)
                                        join sub_modulo sm on(m.m_modulo_id=sm.m_modulo_id)
                                        join material mt on(sm.sm_sub_modulo_id=mt.sm_sub_modulo_id and mt.m_material_id=p.m_material_id)

                                        where 	s.s_seleccionada=o.o_matricula 
                                        and 	o.o_correcto
                                        group by 	e.e_empresa_id,
                                                        d.d_division_id,
                                                        m.m_modulo_id,
                                                        sm.sm_sub_modulo_id,
                                                        p.m_material_id,
                                                        eo.e_empleado_id
                                        ) as x
                        group by        x.e_empresa_id";
        $resultado = $this->db->query($query);
        $out = $resultado->result();
        $resultado->next_result();
        $resultado->free_result();
        return $out;
    }

    public function promedioXEDMSM($e_empresa_id, $d_division_id, $m_modulo_id, $sm_sub_modulo_id) {
        $part_e_empresa_id = $this->prepare_list($e_empresa_id, "and e.e_empresa_id in (");
        $part_d_division_id = $this->prepare_list($d_division_id, "and d.d_division_id in(");
        $part_m_modulo_id = $this->prepare_list($m_modulo_id, "and m.m_modulo_id in(");
        $part_sm_sub_modulo_id = $this->prepare_list($sm_sub_modulo_id, "and sm.sm_sub_modulo_id in(");
        $query = " select  	e.e_empresa_id,
                                e.e_nombre,
                                d.d_division_id,
                                d.d_nombre,
                                m.m_modulo_id,
                                m.m_nombre,
                                sm.sm_sub_modulo_id,
                                sm.sm_nombre,
                                p.m_material_id,
                                mt.m_titulo,
                                eo.e_empleado_id,
                                eo.e_nombre as employee_name,
                                eo.e_fecha_alta,
                                eo.e_email,
                                round((count(*)/tp.total_preguntas)*10,2) as prom
                    from empresa e 
                    join division d on(e.e_empresa_id=d.e_empresa_id)
                    join empleado eo on(d.d_division_id=eo.d_division_id)
                    join seleccion s on(eo.e_empleado_id=s.e_empleado_id)
                    join pregunta p on(s.p_pregunta_id=p.p_pregunta_id)
                    join opcion o on(p.p_pregunta_id=o.p_pregunta_id)
                    join modulo m on(d.d_division_id=d.d_division_id)
                    join sub_modulo sm on(m.m_modulo_id=sm.m_modulo_id)
                    join material mt on(sm.sm_sub_modulo_id=mt.sm_sub_modulo_id and mt.m_material_id=p.m_material_id)

                    join (  
                                    SELECT  p.m_material_id,
                                                    count(*) total_preguntas 
                                    FROM    pregunta p 
                                    group by p.m_material_id
                            ) tp on(tp.m_material_id=p.m_material_id)

                    where s.s_seleccionada=o.o_matricula 
                    and o.o_correcto
                    
                    $part_e_empresa_id 
                    $part_d_division_id 
                    $part_m_modulo_id 
                    $part_sm_sub_modulo_id

                    group by    e.e_empresa_id,
                                d.d_division_id,
                                m.m_modulo_id,
                                sm.sm_sub_modulo_id,
                                p.m_material_id,
                                eo.e_empleado_id
                    order by    e.e_empresa_id,
                                d.d_division_id,
                                m.m_modulo_id,
                                sm.sm_sub_modulo_id,
                                p.m_material_id,
                                eo.e_empleado_id";
        $resultado = $this->db->query($query);
        $out = $resultado->result();
        $resultado->next_result();
        $resultado->free_result();
        return $out;
    }

    function prepare_list($variable, $string) {
        if (($variable != '*') && !is_array($variable)) {
            return $string.= $variable . ')';
        }

        if (is_array($variable) && !in_array('*', $variable)) {
            $max = count($variable);
            for ($i = 0; $i < $max; $i++) {
                $string.="$variable[$i],";
            }
            return trim($string, ',') . ')';
        }

        return "";
    }

}
